//
//  ParserDelegate.m
//  dseman
//
//  Created by Admin on 2/25/13.
//  Copyright (c) 2013 admin. All rights reserved.
//

#import "ParserDelegate.h"

@implementation ParserDelegate
@synthesize done=m_done;
@synthesize titles=m_titles;
@synthesize error=m_error;
@synthesize key_values=m_key_values;
@synthesize lastupdate=m_lastupdate;

// документ начал парситься
- (void)parserDidStartDocument:(NSXMLParser *)parser {
    m_done = NO;
    m_titles = [NSMutableArray new];
    m_key_values = [NSMutableDictionary new];
}
// парсинг окончен
- (void)parserDidEndDocument:(NSXMLParser *)parser {
    m_done = YES;
}
// если произошла ошибка парсинга
-(void) parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    m_done = YES;
}
// если произошла ошибка валидации
-(void) parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError {
    m_done = YES;
}
// встретили новый элемент
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    // проверяем, нашли ли мы элемент "title"
    m_isTitle = [[elementName lowercaseString] isEqualToString:@"key"];
    m_isValue = [[elementName lowercaseString] isEqualToString:@"value"];
    
    if ( m_isTitle ) {
        // если да - создаем строку в которую запишем его значение
        m_title = [NSMutableString new];
    }
    
    if ( m_isValue ) {
        m_value = [NSMutableString new];
    }
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    
    // если элемент title закончился - добавим строку в результат
    if ( m_isTitle ) {
        [m_titles addObject:m_title];
    }
    if ( m_isValue ) {
        NSLog(@"Set key: %@", m_title);
        NSLog(@"set value %@", m_value);
        [m_key_values setValue:m_value forKey:m_title];
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    // если сейчас получаем значение элемента title
    // добавим часть его значения к строке
    if ( m_isTitle ) {
        [m_title appendString:string];
    }
    
    if ( m_isValue ) {
        [m_value appendString:string];
    }
}

@end
